﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace EWS
{
    class WardClient
    {
        private int wardNumber;
        // hält all die betten, die momentan auf der gui dargestellt werden sollen
        private SortedList<int, Bed> bedsList;
        private static DBConnection myDBCon;
        private SimMultiMeter myMultiMeter;
        // hält liste mit
        // bettnummer (int) und foreign keys für schwester (int) und arzt (int) pro element
        private List<int[]> newBedsList;

        public WardClient(int wardNumber)
        {
            this.wardNumber = wardNumber;
            
            myMultiMeter = new SimMultiMeter();
            
            myDBCon = DBConnection.getInstance();
            newBedsList = new List<int[]>();
        }

        // updatet alle betten... also bekommt neue Messwerte für alle Betten
        // true for success
        public bool update()
        {
            bedsList = myDBCon.getBedsByWardNumber(wardNumber);
            
            return true;
        }

        public bool store2DB()
        {
            int currBedNumber, currPkNurse, currPkDoc;
            measureData currMeasureData;

            foreach (int[] bedItem in newBedsList)
            {
                currBedNumber = bedItem[0];
                currPkNurse = bedItem[1];
                currPkDoc = bedItem[2];

                currMeasureData = myMultiMeter.getMeasureData(currBedNumber);
                myDBCon.insertMeasureData(currMeasureData, currPkDoc, currPkNurse);
            }
            return true;
        }

        public bool addNewBed(int bedNumber, int pkNurse, int pkDoctor)
        {
            // prüfe ob das bett schon angelegt wurde
            bool containsBedNumber = false;

            foreach (int[] element in newBedsList)
            {
                if (element[0] == bedNumber)
                {
                    containsBedNumber = true;
                }
            }

            if (!containsBedNumber)
            {
                newBedsList.Add(new int[] { bedNumber, pkNurse, pkDoctor });
            }

            // return true: falls die bettnummer noch NICHT in der liste war
            // return false: andernfalls
            return !containsBedNumber;
        }

        public SortedList<int, Bed> BedsList
        {
            get { return bedsList; }
        }

        public DBConnection Connection
        {
            get { return myDBCon; }
        }

        public int WardNumber
        {
            get { return wardNumber; }
            set { wardNumber = value; }
        }
    }
}
